package com.docmgmt.mvp.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 文件夹实体
 * 映射到 doc_folder 表
 *
 * v3.0变更：
 * - 新增 folder_type 字段：personal/shared
 * - 新增 default_privacy 字段：privacy/shared/public
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("doc_folder")
public class FolderEntity {

    /**
     * 文件夹ID（主键，自增）
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 文件夹名称
     */
    private String name;

    /**
     * 父文件夹ID（0表示根目录）
     */
    @TableField("parent_id")
    private Long parentId;

    /**
     * 完整路径（如: /工作文档/项目A）
     */
    private String path;

    /**
     * 文件夹描述
     */
    private String description;

    /**
     * 创建者ID
     */
    @TableField("creator_id")
    private Long creatorId;

    /**
     * 所有者ID
     */
    @TableField("owner_id")
    private Long ownerId;

    /**
     * 层级（1为顶层）
     */
    private Integer level;

    /**
     * 排序
     */
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 文件夹类型（v3.0新增）
     * personal: 个人文件夹（用户注销时删除）
     * shared: 共享文件夹（所有权转移）
     */
    @TableField("folder_type")
    private String folderType;

    /**
     * 默认隐私级别（v3.0新增）
     * 新上传的文件继承此隐私级别
     * privacy: 仅创建者可见
     * shared: 同部门可见
     * public: 所有人可见
     */
    @TableField("default_privacy")
    private String defaultPrivacy;

    /**
     * 是否已删除（逻辑删除标记）
     */
    @TableField("is_deleted")
    @TableLogic
    private Boolean isDeleted;

    /**
     * 删除时间
     */
    @TableField("deleted_at")
    private LocalDateTime deletedAt;

    /**
     * 删除人ID
     */
    @TableField("deleted_by")
    private Long deletedBy;

    /**
     * 创建时间
     */
    @TableField("created_at")
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @TableField("updated_at")
    private LocalDateTime updatedAt;
}
